perm filename PNEW.SAI[PNT,HE]4 blob
sn#496205 filedate 1980-02-08 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY
C00003 00003
C00006 00004 PROCEDURE XERROR
C00010 ENDMK
C⊗;
ENTRY;
BEGIN "PNEW"
COMMENT routines which are not available in AL;
DEFINE $PNEW=TRUE,$ALTER_EGO=TRUE;
REQUIRE "HEADER.SAI" SOURCE_FILE;
DEFINE SGNEXT="'4000000"; ! extend sign bit of input data ;
DEFINE OWPW ="0"; ! word for word transfer;
DEFINE TWRJ ="'1000000"; ! two words per word,right justified in each halfword;
DEFINE TWRM ="'2000000"; ! two words per word,in right most 32 bits;
DEFINE TWLM ="'3000000"; ! two words per word,in left most 32 bits;
INTEGER ARRAY TTMPBUF[1:FBUFFSIZ*2];
EXTERNAL PROCEDURE BUFFERUSAGE(STRING S);
PROCEDURE RSETBUFFCALL;
BEGIN
! force 11 integer and real buffers to be reset to beginning ;
PEEKARRAY(NOTB11,8,NOTBOX); ! gets current status;
INTPTR←INTBUF; INTSIZ←0; ! reset pointers;
FPPTR←FPBUF; FPSIZ←0;
POKEARRAY(NOTB11,8,NOTBOX);
END;
PROCEDURE TGRAPHCALL;
BEGIN
INTEGER I;
PEEKARRAY(NOTB11,8,NOTBOX);
! note that intsiz and fpsiz may be incorrect;
IF $INTSIZ←(INTPTR-INTBUF)/2 THEN
BEGIN
IF $INTSIZ<0 THEN ERROR("TGRAPH DISASTER: asking to transfer negative number of integers");
IF $INTSIZ>IBUFFSIZ THEN
ERROR("TGRAPH DISASTER: trying to transfer too many numbers; probably overran integer buffer");
PEEKARRAY(INTBUF+MAP_OFFSET,$INTSIZ,$INBUF,SGNEXT);
END;
IF $FPSIZ←(FPPTR-FPBUF)/4 THEN
BEGIN
IF $FPSIZ<0 THEN ERROR("TGRAPH DISASTER: asking to transfer negative number of FP nums");
IF $FPSIZ>FBUFFSIZ THEN
ERROR("TGRAPH DISASTER: trying to transfer too many numbers; probably overran FP buffer");
! PEEKARRAY(FPBUF+MAP_OFFSET,$FPSIZ,TMPBUF,TWLM);
PEEKARRAY(FPBUF+MAP_OFFSET,$FPSIZ*2,TTMPBUF);
FOR I←1 STEP 1 UNTIL $FPSIZ DO $FPBUF[I]←RFVAL(TTMPBUF[I*2-1],TTMPBUF[I*2]);
END;
$FPPTR←$INTPTR←0;
$FPMAX←$FPMAX MAX $FPSIZ;
$INTMAX←$INTMAX MAX $INTSIZ;
WHILE $INTPTR<$INTSIZ DO TENINTERPRET;
BUFFERUSAGE("TGRAPH");
GRAPHCALL;
END;
PROCEDURE XERROR;
ERROR(TOKEN," is a dummy statement, use some other word");
INTERNAL PROCEDURE FOOCALL(INTEGER I);
CASE I OF
BEGIN
[1] RSETBUFFCALL;
[2] TGRAPHCALL;
ELSE XERROR
END;
END "PNEW"